{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1次元のデータの整理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## データの中心の指標"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.149227Z",
     "start_time": "2018-08-14T06:43:29.960007Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "# Jupyter Notebookの出力を小数点以下3桁に抑える\n",
    "%precision 3\n",
    "# Dataframeの出力を小数点以下3桁に抑える\n",
    "pd.set_option('precision', 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.160598Z",
     "start_time": "2018-08-14T06:43:30.150458Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>英語</th>\n",
       "      <th>数学</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>生徒番号</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>42</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>69</td>\n",
       "      <td>80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>56</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>41</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>57</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      英語  数学\n",
       "生徒番号        \n",
       "1     42  65\n",
       "2     69  80\n",
       "3     56  63\n",
       "4     41  63\n",
       "5     57  76"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('../data/ch2_scores_em.csv',\n",
    "                 index_col='生徒番号')\n",
    "# dfの最初の5行を表示\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.164864Z",
     "start_time": "2018-08-14T06:43:30.161951Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([42, 69, 56, 41, 57, 48, 65, 49, 65, 58])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores = np.array(df['英語'])[:10]\n",
    "scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.171540Z",
     "start_time": "2018-08-14T06:43:30.166060Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>点数</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>生徒</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>69</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>56</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>49</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    点数\n",
       "生徒    \n",
       "A   42\n",
       "B   69\n",
       "C   56\n",
       "D   41\n",
       "E   57\n",
       "F   48\n",
       "G   65\n",
       "H   49\n",
       "I   65\n",
       "J   58"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores_df = pd.DataFrame({'点数':scores},\n",
    "                         index=pd.Index(['A', 'B', 'C', 'D', 'E',\n",
    "                                         'F', 'G', 'H', 'I', 'J'],\n",
    "                                        name='生徒'))\n",
    "scores_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 平均値"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.176173Z",
     "start_time": "2018-08-14T06:43:30.173034Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "55.000"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum(scores) / len(scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.180268Z",
     "start_time": "2018-08-14T06:43:30.177216Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "55.000"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.185269Z",
     "start_time": "2018-08-14T06:43:30.181389Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "点数    55.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores_df.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 中央値"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.189618Z",
     "start_time": "2018-08-14T06:43:30.186212Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([41, 42, 48, 49, 56, 57, 58, 65, 65, 69])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sorted_scores = np.sort(scores)\n",
    "sorted_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.195944Z",
     "start_time": "2018-08-14T06:43:30.191005Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "56.500"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = len(sorted_scores)\n",
    "if n % 2 == 0:\n",
    "    m0 = sorted_scores[n//2 - 1]\n",
    "    m1 = sorted_scores[n//2]\n",
    "    median = (m0 + m1) / 2\n",
    "else:\n",
    "    median = sorted_scores[(n+1)//2 - 1]\n",
    "median"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.201176Z",
     "start_time": "2018-08-14T06:43:30.197149Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "56.500"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.median(scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.205400Z",
     "start_time": "2018-08-14T06:43:30.202130Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "点数    56.5\n",
       "dtype: float64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores_df.median()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最頻値"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.210888Z",
     "start_time": "2018-08-14T06:43:30.206386Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series([1, 1, 1, 2, 2, 3]).mode()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.215653Z",
     "start_time": "2018-08-14T06:43:30.211883Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1\n",
       "1    2\n",
       "2    3\n",
       "3    4\n",
       "4    5\n",
       "dtype: int64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series([1, 2, 3, 4, 5]).mode()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## データのばらつきの指標"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分散と標準偏差"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 偏差"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.220233Z",
     "start_time": "2018-08-14T06:43:30.216601Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-13.,  14.,   1., -14.,   2.,  -7.,  10.,  -6.,  10.,   3.])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean = np.mean(scores)\n",
    "deviation = scores - mean\n",
    "deviation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.225383Z",
     "start_time": "2018-08-14T06:43:30.221236Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-5.,  5.,  3., -1., -4.,  1.,  2., -2., -3.,  4.])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "another_scores = [50, 60, 58, 54, 51, 56, 57, 53, 52, 59]\n",
    "another_mean = np.mean(another_scores)\n",
    "another_deviation = another_scores - another_mean\n",
    "another_deviation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.229494Z",
     "start_time": "2018-08-14T06:43:30.226428Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.000"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(deviation)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.233510Z",
     "start_time": "2018-08-14T06:43:30.230373Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.000"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(another_deviation)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.240507Z",
     "start_time": "2018-08-14T06:43:30.234389Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>点数</th>\n",
       "      <th>偏差</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>生徒</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>42</td>\n",
       "      <td>-13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>69</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>56</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>41</td>\n",
       "      <td>-14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>57</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>48</td>\n",
       "      <td>-7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>65</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>49</td>\n",
       "      <td>-6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>65</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>58</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    点数    偏差\n",
       "生徒          \n",
       "A   42 -13.0\n",
       "B   69  14.0\n",
       "C   56   1.0\n",
       "D   41 -14.0\n",
       "E   57   2.0\n",
       "F   48  -7.0\n",
       "G   65  10.0\n",
       "H   49  -6.0\n",
       "I   65  10.0\n",
       "J   58   3.0"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "summary_df = scores_df.copy()\n",
    "summary_df['偏差'] = deviation\n",
    "summary_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.245333Z",
     "start_time": "2018-08-14T06:43:30.241861Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "点数    55.0\n",
       "偏差     0.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "summary_df.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分散"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.249659Z",
     "start_time": "2018-08-14T06:43:30.246233Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "86.000"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(deviation ** 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.253985Z",
     "start_time": "2018-08-14T06:43:30.250545Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "86.000"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.var(scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.258576Z",
     "start_time": "2018-08-14T06:43:30.254851Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "点数    95.556\n",
       "dtype: float64"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores_df.var()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.266983Z",
     "start_time": "2018-08-14T06:43:30.259624Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>点数</th>\n",
       "      <th>偏差</th>\n",
       "      <th>偏差二乗</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>生徒</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>42</td>\n",
       "      <td>-13.0</td>\n",
       "      <td>169.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>69</td>\n",
       "      <td>14.0</td>\n",
       "      <td>196.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>56</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>41</td>\n",
       "      <td>-14.0</td>\n",
       "      <td>196.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>57</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>48</td>\n",
       "      <td>-7.0</td>\n",
       "      <td>49.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>65</td>\n",
       "      <td>10.0</td>\n",
       "      <td>100.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>49</td>\n",
       "      <td>-6.0</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>65</td>\n",
       "      <td>10.0</td>\n",
       "      <td>100.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>58</td>\n",
       "      <td>3.0</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    点数    偏差   偏差二乗\n",
       "生徒                 \n",
       "A   42 -13.0  169.0\n",
       "B   69  14.0  196.0\n",
       "C   56   1.0    1.0\n",
       "D   41 -14.0  196.0\n",
       "E   57   2.0    4.0\n",
       "F   48  -7.0   49.0\n",
       "G   65  10.0  100.0\n",
       "H   49  -6.0   36.0\n",
       "I   65  10.0  100.0\n",
       "J   58   3.0    9.0"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "summary_df['偏差二乗'] = np.square(deviation)\n",
    "summary_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.271609Z",
     "start_time": "2018-08-14T06:43:30.267927Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "点数      55.0\n",
       "偏差       0.0\n",
       "偏差二乗    86.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "summary_df.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 標準偏差"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.276008Z",
     "start_time": "2018-08-14T06:43:30.272493Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9.274"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(np.var(scores, ddof=0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.280036Z",
     "start_time": "2018-08-14T06:43:30.277056Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9.274"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.std(scores, ddof=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 範囲と四分位範囲"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 範囲"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.284214Z",
     "start_time": "2018-08-14T06:43:30.280994Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "28"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.max(scores) - np.min(scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 四分位範囲"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.289060Z",
     "start_time": "2018-08-14T06:43:30.285142Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "15.000"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores_Q1 = np.percentile(scores, 25)\n",
    "scores_Q3 = np.percentile(scores, 75)\n",
    "scores_IQR = scores_Q3 - scores_Q1\n",
    "scores_IQR"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### データの指標のまとめ"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.296046Z",
     "start_time": "2018-08-14T06:43:30.290147Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    10.000\n",
       "mean     55.000\n",
       "std       9.775\n",
       "min      41.000\n",
       "25%      48.250\n",
       "50%      56.500\n",
       "75%      63.250\n",
       "max      69.000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(scores).describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## データの正規化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 標準化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.299923Z",
     "start_time": "2018-08-14T06:43:30.297056Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1.402,  1.51 ,  0.108, -1.51 ,  0.216, -0.755,  1.078, -0.647,\n",
       "        1.078,  0.323])"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "z = (scores - np.mean(scores)) / np.std(scores)\n",
    "z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.304016Z",
     "start_time": "2018-08-14T06:43:30.300786Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-0.000, 1.000)"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(z), np.std(z, ddof=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 偏差値"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.307237Z",
     "start_time": "2018-08-14T06:43:30.304893Z"
    }
   },
   "outputs": [],
   "source": [
    "z = 50 + 10 * (scores - np.mean(scores)) / np.std(scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.315638Z",
     "start_time": "2018-08-14T06:43:30.308810Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>点数</th>\n",
       "      <th>偏差値</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>生徒</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>42</td>\n",
       "      <td>35.982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>69</td>\n",
       "      <td>65.097</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>56</td>\n",
       "      <td>51.078</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>41</td>\n",
       "      <td>34.903</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>57</td>\n",
       "      <td>52.157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>48</td>\n",
       "      <td>42.452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>65</td>\n",
       "      <td>60.783</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>49</td>\n",
       "      <td>43.530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>65</td>\n",
       "      <td>60.783</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>58</td>\n",
       "      <td>53.235</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    点数     偏差値\n",
       "生徒            \n",
       "A   42  35.982\n",
       "B   69  65.097\n",
       "C   56  51.078\n",
       "D   41  34.903\n",
       "E   57  52.157\n",
       "F   48  42.452\n",
       "G   65  60.783\n",
       "H   49  43.530\n",
       "I   65  60.783\n",
       "J   58  53.235"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores_df['偏差値'] = z\n",
    "scores_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## データの視覚化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.323447Z",
     "start_time": "2018-08-14T06:43:30.317159Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    50.00\n",
       "mean     58.38\n",
       "std       9.80\n",
       "min      37.00\n",
       "25%      54.00\n",
       "50%      57.50\n",
       "75%      65.00\n",
       "max      79.00\n",
       "dtype: float64"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 50人分の英語の点数のarray\n",
    "english_scores = np.array(df['英語'])\n",
    "# Seriesに変換してdescribeを表示\n",
    "pd.Series(english_scores).describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 度数分布表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.327596Z",
     "start_time": "2018-08-14T06:43:30.324484Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  0,  0,  2,  8, 16, 18,  6,  0,  0])"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "freq, _ = np.histogram(english_scores, bins=10, range=(0, 100))\n",
    "freq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.335597Z",
     "start_time": "2018-08-14T06:43:30.329049Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>度数</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>階級</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0~10</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10~20</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20~30</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30~40</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40~50</th>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50~60</th>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60~70</th>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70~80</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80~90</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90~100</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        度数\n",
       "階級        \n",
       "0~10     0\n",
       "10~20    0\n",
       "20~30    0\n",
       "30~40    2\n",
       "40~50    8\n",
       "50~60   16\n",
       "60~70   18\n",
       "70~80    6\n",
       "80~90    0\n",
       "90~100   0"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 0~10, 10~20, ... といった文字列のリストを作成\n",
    "freq_class = [f'{i}~{i+10}' for i in range(0, 100, 10)]\n",
    "# freq_classをインデックスにしてfreqでDataFrameを作成\n",
    "freq_dist_df = pd.DataFrame({'度数':freq},\n",
    "                            index=pd.Index(freq_class,\n",
    "                                           name='階級'))\n",
    "freq_dist_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.339751Z",
     "start_time": "2018-08-14T06:43:30.336611Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[5, 15, 25, 35, 45, 55, 65, 75, 85, 95]"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "class_value = [(i+(i+10))//2 for i in range(0, 100, 10)]\n",
    "class_value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.343938Z",
     "start_time": "2018-08-14T06:43:30.340628Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.  ,  0.  ,  0.  ,  0.04,  0.16,  0.32,  0.36,  0.12,  0.  ,  0.  ])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rel_freq = freq / freq.sum()\n",
    "rel_freq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.349136Z",
     "start_time": "2018-08-14T06:43:30.344853Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.  ,  0.  ,  0.  ,  0.04,  0.2 ,  0.52,  0.88,  1.  ,  1.  ,  1.  ])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cum_rel_freq = np.cumsum(rel_freq)\n",
    "cum_rel_freq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.358509Z",
     "start_time": "2018-08-14T06:43:30.350057Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>階級値</th>\n",
       "      <th>度数</th>\n",
       "      <th>相対度数</th>\n",
       "      <th>累積相対度数</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>階級</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0~10</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10~20</th>\n",
       "      <td>15</td>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20~30</th>\n",
       "      <td>25</td>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30~40</th>\n",
       "      <td>35</td>\n",
       "      <td>2</td>\n",
       "      <td>0.04</td>\n",
       "      <td>0.04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40~50</th>\n",
       "      <td>45</td>\n",
       "      <td>8</td>\n",
       "      <td>0.16</td>\n",
       "      <td>0.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50~60</th>\n",
       "      <td>55</td>\n",
       "      <td>16</td>\n",
       "      <td>0.32</td>\n",
       "      <td>0.52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60~70</th>\n",
       "      <td>65</td>\n",
       "      <td>18</td>\n",
       "      <td>0.36</td>\n",
       "      <td>0.88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70~80</th>\n",
       "      <td>75</td>\n",
       "      <td>6</td>\n",
       "      <td>0.12</td>\n",
       "      <td>1.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>80~90</th>\n",
       "      <td>85</td>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90~100</th>\n",
       "      <td>95</td>\n",
       "      <td>0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        階級値  度数  相対度数  累積相対度数\n",
       "階級                           \n",
       "0~10      5   0  0.00    0.00\n",
       "10~20    15   0  0.00    0.00\n",
       "20~30    25   0  0.00    0.00\n",
       "30~40    35   2  0.04    0.04\n",
       "40~50    45   8  0.16    0.20\n",
       "50~60    55  16  0.32    0.52\n",
       "60~70    65  18  0.36    0.88\n",
       "70~80    75   6  0.12    1.00\n",
       "80~90    85   0  0.00    1.00\n",
       "90~100   95   0  0.00    1.00"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "freq_dist_df['階級値'] = class_value\n",
    "freq_dist_df['相対度数'] = rel_freq\n",
    "freq_dist_df['累積相対度数'] = cum_rel_freq\n",
    "freq_dist_df = freq_dist_df[['階級値', '度数',\n",
    "                             '相対度数', '累積相対度数']]\n",
    "\n",
    "freq_dist_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 最頻値ふたたび"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.362749Z",
     "start_time": "2018-08-14T06:43:30.359494Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "65"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "freq_dist_df.loc[freq_dist_df['度数'].idxmax(), '階級値']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ヒストグラム"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.433997Z",
     "start_time": "2018-08-14T06:43:30.363672Z"
    }
   },
   "outputs": [],
   "source": [
    "# Matplotlibのpyplotモジュールをpltという名前でインポート\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# グラフがnotebook上に表示されるようにする\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.545265Z",
     "start_time": "2018-08-14T06:43:30.435106Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# キャンバスを作る\n",
    "# figsizeで横・縦の大きさを指定\n",
    "fig = plt.figure(figsize=(10, 6))\n",
    "# キャンバス上にグラフを描画するための領域を作る\n",
    "# 引数は領域を1×1個作り、1つめの領域に描画することを意味する\n",
    "ax = fig.add_subplot(111)\n",
    "\n",
    "# 階級数を10にしてヒストグラムを描画\n",
    "freq, _, _ = ax.hist(english_scores, bins=10, range=(0, 100))\n",
    "# X軸にラベルをつける\n",
    "ax.set_xlabel('点数')\n",
    "# Y軸にラベルをつける\n",
    "ax.set_ylabel('人数')\n",
    "# X軸に0, 10, 20, ..., 100の目盛りをふる\n",
    "ax.set_xticks(np.linspace(0, 100, 10+1))\n",
    "# Y軸に0, 1, 2, ...の目盛りをふる\n",
    "ax.set_yticks(np.arange(0, freq.max()+1))\n",
    "# グラフの表示\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.697705Z",
     "start_time": "2018-08-14T06:43:30.546461Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(10, 6))\n",
    "ax = fig.add_subplot(111)\n",
    "\n",
    "freq, _ , _ = ax.hist(english_scores, bins=25, range=(0, 100))\n",
    "ax.set_xlabel('点数')\n",
    "ax.set_ylabel('人数')\n",
    "ax.set_xticks(np.linspace(0, 100, 25+1))\n",
    "ax.set_yticks(np.arange(0, freq.max()+1))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:44:31.768785Z",
     "start_time": "2018-08-14T06:44:31.512798Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAowAAAF1CAYAAABiRruaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xt8XPV95//XZy6SsGzLtoyNL2AZGwIGG4iVYIgDDoYkkJAukMuySVOSUNOmzTabZjdpum1aumUfvf6STdMQ02Qh+ZWmkBSIuSYodoIDNtgQ4xsGXyTjG9iyLXzTZWY++8cZCUmeGd3m6Iw07+fjoYd0zvl+P/M5un70Pef7PebuiIiIiIjkE4s6AREREREpbSoYRURERKQgFYwiIiIiUpAKRhEREREpSAWjiIiIiBSkglFEREREClLBKCIiIiIFqWAUERERkYJUMIqIiIhIQSoYRURERKSgRNQJFFssFvMzzjgj1Ndwd8yspGOWerwwYpZ6vDBillu8MGKWerwwYpZbvDBilnq8MGKWW7ywYvZ28uRJd/fSH8Bz91H1NmbMGA/brl27Sj5mqccLI2apxwsjZrnFCyNmqccLI2a5xQsjZqnHCyNmucULK2ZvwAkvgfqpr7fSr2hFREREJFIqGEVERESkIBWMIiIiIlKQCkYRERERKUgFo4iIiIgUpIJRRERERApSwSgiIiIiBalgFBEREZGCVDCKiIiISEGhPBrQgufoLAcWAo+6+5/naDMJuA+YDGwBbgcqgB8BdcDd7v7dbLsHgVrgz9x9RRg5i4iIFMvGjRtpaGigpaWFmpoali5dyvz580sm3kjIcSSc83Aws1uBbwEz3b01x/E+a65iCOtZ0ouAKqAe2Gdmd7v7vl5tPg/80N0fMLOfAPOBi4BNwG3ATjO7F7gDuB9YC/wYUMEoIiIla+PGjaxYsYKOjg4AWlpaWLEi+NM1mOKk2PFGQo4j4ZyH0TFgW4Hj/am5hiysgnEhsBJYAKwGLgN6J98AbM1+3A4cyfZ7nODk1wBzs/v+B8En4rCZVbv7iZDyFhERGZKGhoauoqRTR0cHTz75JFVVVUyePJmJEyfS3t5OU1MTAG+88UZXnylTplBTU0Nrayuvv/46Tz75ZM54Tz/9NFVVVae9/vTp06murubUqVO89tprpx2fOXNmwRzPP/98KisraWlp4c033+w63pnjrFmzqKio4MiRIxw6dAggb46d59zdnDlziMViHD16NGd+5513Xt78nnrqqa7i7sCBAxw7dqxHfu7O7NmzAdi3bx8nTrxdLuTLsaGhoaQLRnd/1My+XKBJf2quIQurYKwBdgNTgFXZ7R7c/TkAM/s8sNXdXzezGuAQcBZBMVmTfTtEUFDuy26rYBQRkZKSTqfZvXs3LS0tOY+fPHmS+++/n/e///1cccUVvPXWW9x///2ntfvwhz/MwoULaW5uznm8U77+t956K+effz4HDx5k5cqVpx2/7bbbCuZ4+PBhpk2bxmuvvcZjjz12Wps//MM/pLa2li1btvD000/nza8zXu8c/+RP/oSKigpeffVVtm7delqfr3/963nz614Arl69ms2bN/c4Pm7cOL70pS8BsGrVqpwFaW/5XmsYJcxsXbft5e6+fAD9+6y5iiGsgrEFqCS4N3EhsCtXIzP7KtDm7nd26zcZ2ADckt1uAeYQVM1fzm73jrMMWAaQTCZpbGws4qmcrrm5ueRjlnq8MGKWerwwYpZbvDBilnq8MGIWO96SuzcDm/ts118/+dhZRYvVKazP4alTp9izZw979+5l3759dHR0EI/HSafTp/Wpqqrimmuuobq6msbGRlKpFDfccANA1z11AGPGjKGxsZGOjg5uuOEGfvGLX9Daetqta4wZM4YlS5actt/daWxsJJlMdsXvrq2tjerq6h7FV/ccjx8/TmNjI9XV1T36d+Z49OhRjh07xsSJE7uO58ux85y727NnD7FYjGnTpnWNBnbX+dq58jvjjDO6/saff/75zJo1q0d+EydO7Dp+0UUXcd5553Udz5dj59cjlzB+nnNIuXv9EPr3q+YaqrAKxvXALe7+oJldRTC5pQczuwI4x90/36vfPIIKeQGwPbtvBvAqMC7X5ehsJb4coLq62uvq6op6MrmE8RrFjlnq8cKIWerxwohZbvHCiFnq8cKIWdx4xSsWAWpra0v2c+juHD58uCved7/7XQ4cOMC4ceOYP38+5513HqdOneKJJ57ocfmzs3jLd+mzsbExb35VVVU97r3rjPfBD36wz0up+WJ+4AMfyBnzhhtu6FFkDTXHQuc8mPyuv/76vH0K5Vcoxw984AMF+w1HTTFEfdZcxRBWwbgG+JyZrQWeynPz5e8DC81s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\n",
      "text/plain": [
       "<Figure size 720x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(10, 6))\n",
    "ax1 = fig.add_subplot(111)\n",
    "# Y軸のスケールが違うグラフをax1と同じ領域上に書けるようにする\n",
    "ax2 = ax1.twinx()\n",
    "\n",
    "# 相対度数のヒストグラムにするためには、度数をデータの数で割る必要がある\n",
    "# これはhistの引数weightを指定することで実現できる\n",
    "weights = np.ones_like(english_scores) / len(english_scores)\n",
    "rel_freq, _, _ = ax1.hist(english_scores, bins=25,\n",
    "                          range=(0, 100), weights=weights)\n",
    "\n",
    "cum_rel_freq = np.cumsum(rel_freq)\n",
    "class_value = [(i+(i+4))//2 for i in range(0, 100, 4)]\n",
    "# 折れ線グラフの描画\n",
    "# 引数lsを'--'にすることで線が点線に\n",
    "# 引数markerを'o'にすることでデータ点を丸に\n",
    "# 引数colorを'gray'にすることで灰色に\n",
    "ax2.plot(class_value, cum_rel_freq,\n",
    "         ls='--', marker='o', color='gray')\n",
    "# 折れ線グラフの罫線を消去\n",
    "ax2.grid(visible=False)\n",
    "\n",
    "ax1.set_xlabel('点数')\n",
    "ax1.set_ylabel('相対度数')\n",
    "ax2.set_ylabel('累積相対度数')\n",
    "ax1.set_xticks(np.linspace(0, 100, 25+1))\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 箱ひげ図"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-08-14T06:43:30.920657Z",
     "start_time": "2018-08-14T06:43:30.869261Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(5, 6))\n",
    "ax = fig.add_subplot(111)\n",
    "ax.boxplot(english_scores, labels=['英語'])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
